package main

import "fmt"

func main() {
	fmt.Println("4. 运算符")

	// 算术运算符
	a, b := 10, 3
	fmt.Println("算术运算符:")
	fmt.Printf("%d + %d = %d\n", a, b, a+b)
	fmt.Printf("%d - %d = %d\n", a, b, a-b)
	fmt.Printf("%d * %d = %d\n", a, b, a*b)
	fmt.Printf("%d / %d = %d\n", a, b, a/b)
	fmt.Printf("%d %% %d = %d\n", a, b, a%b)

	// 关系运算符
	fmt.Println("\n关系运算符:")
	fmt.Printf("%d == %d : %t\n", a, b, a == b)
	fmt.Printf("%d != %d : %t\n", a, b, a != b)
	fmt.Printf("%d < %d : %t\n", a, b, a < b)
	fmt.Printf("%d <= %d : %t\n", a, b, a <= b)
	fmt.Printf("%d > %d : %t\n", a, b, a > b)
	fmt.Printf("%d >= %d : %t\n", a, b, a >= b)

	// 逻辑运算符
	x, y := true, false
	fmt.Println("\n逻辑运算符:")
	fmt.Printf("%t && %t : %t\n", x, y, x && y)
	fmt.Printf("%t || %t : %t\n", x, y, x || y)
	fmt.Printf("!%t : %t\n", x, !x)

	// 位运算符
	c, d := 5, 3 // 5=101, 3=011
	fmt.Println("\n位运算符:")
	fmt.Printf("%d & %d = %d (按位与)\n", c, d, c&d)
	fmt.Printf("%d | %d = %d (按位或)\n", c, d, c|d)
	fmt.Printf("%d ^ %d = %d (按位异或)\n", c, d, c^d)
	fmt.Printf("%d << 1 = %d (左移)\n", c, c<<1)
	fmt.Printf("%d >> 1 = %d (右移)\n", c, c>>1)

	// 赋值运算符
	fmt.Println("\n赋值运算符:")
	e := 10
	fmt.Printf("e = %d\n", e)
	e += 5
	fmt.Printf("e += 5 => %d\n", e)
	e -= 3
	fmt.Printf("e -= 3 => %d\n", e)
	e *= 2
	fmt.Printf("e *= 2 => %d\n", e)
	e /= 4
	fmt.Printf("e /= 4 => %d\n", e)
	e %= 3
	fmt.Printf("e %%= 3 => %d\n", e)

	// 其他运算符
	// & 返回变量内存地址
	// * 指针变量指向的值
	f := 42
	fmt.Println("\n其他运算符:")
	fmt.Printf("变量 f 的值: %d\n", f)
	fmt.Printf("变量 f 的地址: %p\n", &f)
	ptr := &f
	fmt.Printf("通过指针访问 f 的值: %d\n", *ptr)
}
